package org.etnaframework.module.jdbc;

import java.lang.annotation.*;

/**
 * 用于标注table类的字段和数据库表字段之间的对应关系
 *
 * @author jasyaf
 * @since 2023-12-27
 */
@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface DbField {

    /**
     * 类字段对应的表的列字段名，默认是使用类字段名
     */
    String name() default "";

    /**
     * 如果不需要该字段的值写入数据库，请设置为false，设置为false时自动生成insert/update sql的机制都会忽略该字段
     */
    boolean writeToDb() default true;

    /**
     * 如果不需要从数据库读取该字段的值，请设置为false
     */
    boolean readFromDb() default true;

    /**
     * <pre>
     * 使用{@link SqlBuilder}传入对象生成sql语句时，对null值字段的处理策略
     *
     * 默认为false，此时null值的字段将不会参与生成sql，即无法将null值写入到数据库
     * 如果设置为true，字段值为null也会参与生成sql，null值将会被写入到数据库
     * </pre>
     */
    boolean writeNullToDb() default false;

    /**
     * 如果当前字段是枚举类型，指定枚举类型的出入库转换方式
     * 如果当前字段不是枚举类型，此配置无效
     */
    EnumConvertMode enumConvertMode() default EnumConvertMode.NAME;
}
